package com.xunk.equipment.service.mandun.service;

import com.xunk.common.core.domain.MandunFacility;
import com.xunk.common.core.web.domain.AjaxResult;
import com.xunk.equipment.config.MandunConfig;
import com.xunk.equipment.service.mandun.vo.IntervalRequest;
import com.xunk.equipment.service.mandun.vo.MandunBoxAlarmResponse;
import com.xunk.equipment.service.mandun.vo.MandunFacilityProperty;
import com.xunk.equipment.service.mandun.vo.MandunOnlineHistory;

import java.util.List;

/**
 * @ProjectName: xunk
 * @Package: com.xunk.equipment.service.ruying.mandun.service
 * @ClassName: IMandunService
 * @Author: luanzhiwei
 * @Description: 曼顿iservice
 * @Date: 2021/3/27 14:49
 * @Version: 1.0
 */
public interface IMandunService {

    /**
     * 获取token
     *
     * @return
     */
    String getToken();

    /**
     * 获取项目内全部设备信息
     *
     * @return
     */
    List<MandunFacility> getBoxes();

    /**
     * 获取单个设备信息
     *
     * @param mac
     * @return
     */
    AjaxResult getBox(String mac);

    /**
     * 获取设备节点属性
     *
     * @param mac
     * @return
     */
    MandunFacilityProperty getBoxProperties(String mac);

    /**
     * 获取设备实时状态数据
     * <List<MandunRealTimeStatus>>
     *
     * @param deviceSn
     * @return
     */
    AjaxResult getBoxChannelsRealtime(String deviceSn);

    /**
     * 获取设备告警数据
     *
     * @param mac
     * @return
     */
    MandunBoxAlarmResponse getBoxAlarm(String mac);


    /**
     * 获取设备小时、日、月、年区间统计(电量、电流、电压、温度、漏电)
     * <p>
     * mac   必传
     * year  必传
     * month 月份,不传将返回当年每月数据
     * day   日,不传将返回当月每天数据
     * hour  小时（24时制）, 不传具体小时将返回当天每小时数据
     *
     * @return
     */
    AjaxResult getInterval(IntervalRequest request);

    /**
     * （此接口目前仅支持查询近半年的设备在线轨迹）
     *
     * @param mac
     * @param startTime 格式：yyyy-MM-dd HH:mm
     * @param endTime   格式：yyyy-MM-dd HH:mm
     * @return
     */
    MandunOnlineHistory getBoxOnlineHistory(String mac, String startTime, String endTime);

    /**
     * 消息推送订阅管理，调用该方法订阅告警
     *
     * @return
     */
    AjaxResult subscribePushService(byte pusthType);

    /**
     * 删除订阅推送
     *
     * @param pushType
     * @return
     */
    AjaxResult unsubscribe(byte pushType);

    /**
     * 查询已订阅的推送
     *
     * @param pushType
     * @return
     */
    AjaxResult querySubscribe(byte pushType);

    /**
     * 刷新token
     *
     * @param config
     * @param refreshToken
     * @return
     */
    String refreshToken(MandunConfig config, String refreshToken);

    /**
     * 获取token
     *
     * @param config
     * @param lockValue
     * @return
     */
    String accessToken(MandunConfig config, String lockValue);
}
